package com.niiwoo.civet.trade.service.intelligenceInvest;

import com.niiwoo.civet.trade.dto.request.IntelligenceInvestDubboRequest;
import com.niiwoo.civet.trade.dto.request.intelligenceInvest.*;
import com.niiwoo.civet.trade.dto.response.IntelligenceInvestOrderResponseDTO;
import com.niiwoo.civet.trade.dto.response.InvestingProjectDTO;
import com.niiwoo.civet.trade.dto.response.intelligenceInvest.*;
import com.niiwoo.civet.trade.enums.InvestOrderCloseReasonEnum;
import com.niiwoo.tripod.provider.dto.response.PageResponseDTO;

import java.util.List;

/**
 * 智能投服务API
 */
public interface IntelligenceInvestDubboService {

	default IntelligenceInvestSwitchResponseDTO intelligenceInvestSwitch() {
		throw new UnsupportedOperationException("未实现");
	}

	/**
	 * 智能投开关
	 * 
	 * @return
	 */
	default IntelligenceInvestSwitchResponseDTO intelligenceInvestSwitch(Byte sourceCode) {
		throw new UnsupportedOperationException("未实现");
	};

	/**
	 * 指定打包
	 * 
	 * @param requestDTO
	 */
	void designatedPackage(DesignatedPackageRequestDTO requestDTO);

	/**
	 * 取消发布
	 * 
	 * @param requestDTO
	 */
	void cancelPublish(CancelPublishRequestDTO requestDTO);

	/**
	 * 优先发布
	 * 
	 * @param requestDTO
	 */
	void firstPublish(FirstPublishRequestDTO requestDTO);

	/**
	 * 定时打包
	 */
	void doPackageForJob();

	/**
	 * 定时加标
	 */
	void addProjectForJob();

	/**
	 * 定时发布
	 */
	void doPublishForJob();

	/**
	 * 获取智能投列表
	 * 
	 * @param requestDTO
	 * @return
	 */
	PageResponseDTO<IntelligenceInvestResponseDTO> getIntelligenceInvestList(IntelligenceInvestPageRequestDTO requestDTO);

	
	default IntelligenceInvestDetailResponseDTO getIntelligenceInvestDetail(Long packageId,String userId) {
		throw new UnsupportedOperationException("未实现");
	}
	
	/**
	 * 智能投详情
	 * 
	 * @param packageId
	 * @return
	 */
	default IntelligenceInvestDetailResponseDTO getIntelligenceInvestDetail(IntelligenceInvestDetailRequestDTO requestDTO) {
		throw new UnsupportedOperationException("未实现");
	};

	/**
	 * 智能投包信息(没有就返回null)
	 * 
	 * @param packageId
	 * @return
	 */
	ProjectPackageResponseDTO getIntelligenceInvestInfo(Long packageId);

	/**
	 * 查询智能投标的组成
	 * 
	 * @param dto
	 * @return
	 */
	PageResponseDTO<InvestingProjectDTO> getIntelligenceInvestTotalProjectInfos(IntelligenceInvestCombinationRequestDTO dto);

	/**
	 * 用户是否是可以投资新手智能投
	 * 
	 * @param userId
	 * @return
	 */
	NoviceIntelligenceInvestInfoResponseDTO getNoviceInvestInfos(String userId);

	/**
	 * 智能投投资确认
	 * 
	 * @param request
	 * @return
	 */
	default IntelligenceInvestOrderResponseDTO intelligenceInvest(IntelligenceInvestDubboRequest request) {
		throw new UnsupportedOperationException("未实现的方法");
	};

	/**
	 * 智能投投资存管订单生成
	 */
	default void intelligenceInvestEventTrigger(Long projectPackageInvestOrderId) {
		throw new UnsupportedOperationException("未实现的方法");
	}

	/**
	 * 智能投订单存管调用结果回调
	 */
	default void intelligenceInvestEventCallBackHand(Long projectPackageInvestOrderId, Boolean success) {
		throw new UnsupportedOperationException("未实现的方法");
	}

	/**
	 * 流包
	 */
	default void flow() {
		throw new UnsupportedOperationException("未实现的方法");
	}

	/**
	 * 智能投订单取消操作
	 * 
	 * @param projectPackageInvestOrderId
	 * @param investOrderId
	 * @param closeReasonEnum
	 */
	default void investCancelSuccess(Long projectPackageInvestOrderId, Long investOrderId, InvestOrderCloseReasonEnum closeReasonEnum) {
		throw new UnsupportedOperationException("未实现的方法");
	}

	/**
	 * 再次触发存管投资调用
	 */
	default void triggerInvest() {
		throw new UnsupportedOperationException("未实现的方法");
	}

	/**
	 * 再次触发取消智能投订单
	 */
	default void triggerCancel() {
		throw new UnsupportedOperationException("未实现的方法");
	}

	default List<IntelligencePayInfoResponseDTO> getIntelligencePayInfo(Long projectPackagePayInfo) {
		throw new UnsupportedOperationException("未实现的方法");
	}

	/**
	 * 智能投投资成功回调
	 * 
	 * @param packageInvestOrderId
	 */
	default void intelligenceInvestSuccess(Long packageInvestOrderId) {
		throw new UnsupportedOperationException("未实现的方法");
	}

	/**
	 * 智能投失败分两部分 第一部分 修改智能投订单状态为 关闭中
	 * 
	 * @param projectPackageOrderId
	 */
	default void intelligenceInvestPreCancel(Long projectPackageOrderId) {
		throw new UnsupportedOperationException("未实现的方法");
	}

	/**
	 * 智能投失败分两部分 第一部分 修改智能投订单状态为 关闭中
	 * 
	 * @param projectPackageOrderId
	 */
	default void intelligenceCancel(Long projectPackageOrderId) {
		throw new UnsupportedOperationException("未实现的方法");
	}

	default ProjectPackageResponseDTO getProjectPackageByProjectId(Long projectId) {
		throw new UnsupportedOperationException("未实现的方法");
	}

	/**
	 * 智能投发起资金解冻
	 */
	default void unfreeAmount() {
		throw new UnsupportedOperationException("未实现的方法");
	}

	/**
	 * 薪金宝获取期限
	 * 
	 * @return
	 */
	default SelectIntelligenceDeadlineResponseDTO selectIntelligenceDeadline(SelectIntelligenceDeadlineRequestDTO requestDto) {
		throw new UnsupportedOperationException("未实现的方法");
	}
	default IsSmartInvestSoldOutResponseDTO queryIntelligenceInvestCount(String userId){
		throw new UnsupportedOperationException("未实现的方法");
	}
}
